package cn.tedu.tickets;
/**需求：设计多线程模型，4个售票窗口共计售票100张
 * 本方案使用多线程编程实现方案1：继承Thread类的方式来完成*/
public class TestThread {
    public static void main(String[] args) {
        TicketThread t1 = new TicketThread("窗口1");
        TicketThread t2 = new TicketThread("窗口2");
        TicketThread t3 = new TicketThread("窗口3");
        TicketThread t4 = new TicketThread("窗口4");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }


}
class TicketThread extends Thread{

    //3.定义成员变量用来保存票数
    /**问题：4个线程对象共计售票400张，原因是创建了4个本类的对象，各自操作各自的成员变量
     * 解决：让所有对象共享同一个变量，这个变量需要设置为静态的*/
    static int tickets = 100;

    /**添加本类的含参构造，用于给线程对象起名字
     * 由于只添加了这一个含参构造，默认的无参构造被覆盖掉了*/
    public TicketThread(String name) {
        /**表示调用父类的含参构造，因为实际上起名的功能是父类完成的
         * 所以我们需要将本构造函数接到的名字参数，传给父类的构造函数，让父类起名字*/
        super(name);
    }

    //2.重写run()，里面是我们的业务
    @Override
    public void run() {
        //4.1循环卖票
        while (true){
            //4.2打印当前正在卖票的线程名称，并且票数11
            System.out.println(getName()+"="+tickets--);
            //4.3做判断，如果没有票了，就退出死循环
            if (tickets <= 0) break;//设置死循环的出口
        }

    }
}